package com.sybil.spa.dominio;

import com.sybil.spa.dominio.r12.ConceptoGasto;
import com.sybil.spa.dominio.r12.Impuesto;
import com.sybil.spa.dominio.r12.Moneda;
import com.sybil.spa.dominio.r12.Proveedor;
import com.sybil.spa.dominio.r12.TipoComprobante;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(name = "SPA_DETALLE_REEMBOLSOS")
public class DetalleReembolso implements Serializable {

   private static final long serialVersionUID = 1L;
   protected DetalleReembolsoPK llave;
   private int numeroConceptoGasto;
   private String claveMoneda;
   private int numeroImpuesto;
   private int numeroProveedor;
   private String claveTipoComprobante;//factura recibo nota.
   private String numeroComprobante;
   private String descripcionConcepto;
   private double tipoCambio;
   private Date fecha;
   private String deducible;
   private int kilometraje;
   private int diasRenta;
   private int numeroAsisten;
   private String perosonasAsisten;
   private double montoSinIva;
   private double montoIva;
   private double montoOtroImpuesto;
   private double montoPropina;
   private double sumaSinIva;
   private String observaciones;
   private String usuarioCreo;
   private String usuarioModif;
   private Reembolso reembolso;

   private ConceptoGasto conceptoGasto;
   private Moneda moneda;
   private Impuesto impuesto;
   private Proveedor proveedor;
   private TipoComprobante tipoComprobante;

   public DetalleReembolso() {
   }

   public DetalleReembolso(DetalleReembolsoPK detalleReembolsoPK) {
      this.llave = detalleReembolsoPK;
   }

   public DetalleReembolso(int numeroReembolso, int numeroDetalle) {
      this.llave = new DetalleReembolsoPK(numeroReembolso, numeroDetalle);
   }

   public DetalleReembolso(DetalleReembolsoPK llave, String tipo,
           int conceptoGasto, String moneda, double tipoCambio, Date fecha,
           int impuesto, String deducible, int kilometraje, int diasRenta,
           int numeroAsisten, int numeroProveedor, double montoSinIva, double montoIva,
           double montoOtroImpuesto, double montoPropina, double sumaSinIva, String usuarioCreo) {
      this.llave = llave;
      this.claveTipoComprobante = tipo;
      this.numeroConceptoGasto = conceptoGasto;
      this.claveMoneda = moneda;
      this.tipoCambio = tipoCambio;
      this.fecha = fecha;
      this.numeroImpuesto = impuesto;
      this.deducible = deducible;
      this.kilometraje = kilometraje;
      this.diasRenta = diasRenta;
      this.numeroAsisten = numeroAsisten;
      this.numeroProveedor = numeroProveedor;
      this.montoSinIva = montoSinIva;
      this.montoIva = montoIva;
      this.montoOtroImpuesto = montoOtroImpuesto;
      this.montoPropina = montoPropina;
      this.sumaSinIva = sumaSinIva;
      this.usuarioCreo = usuarioCreo;
   }

   @EmbeddedId
   public DetalleReembolsoPK getLlave() {
      return llave;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 25)
   @Column(name = "DERE_TIPO")
   public String getClaveTipoComprobante() {
      return claveTipoComprobante;
   }

   @Basic(optional = false)
   @NotNull
   @Column(name = "DERE_CONCEPTO_GASTO")
   public int getNumeroConceptoGasto() {
      return numeroConceptoGasto;
   }

   @Size(max = 100)
   @Column(name = "DERE_DESC_CONCEPTO", length = 100)
   public String getDescripcionConcepto() {
      return descripcionConcepto;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 25)
   @Column(name = "DERE_NUMERO_COMPROB")
   public String getNumeroComprobante() {
      return numeroComprobante;
   }

   @NotNull
   @Size(min = 1, max = 25)
   @Basic(optional = false)
   @Column(name = "DERE_MONEDA")
   public String getClaveMoneda() {
      return claveMoneda;
   }

   @Basic(optional = false)
   @Column(name = "DERE_TIPO_CAMBIO")
   public double getTipoCambio() {
      return tipoCambio;
   }

   @Basic(optional = false)
   @NotNull
   @Column(name = "DERE_FECHA")
   @Temporal(TemporalType.TIMESTAMP)
   public Date getFecha() {
      return fecha;
   }

   @Basic(optional = false)
   @NotNull
   @Column(name = "DERE_IMPUESTO")
   public int getNumeroImpuesto() {
      return numeroImpuesto;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "DERE_DEDUCIBLE")
   public String getDeducible() {
      return deducible;
   }

   @Basic(optional = false)
   @Column(name = "DERE_KILOMETRAJE")
   public int getKilometraje() {
      return kilometraje;
   }

   @Basic(optional = false)
   @Column(name = "DERE_DIAS_RENTA")
   public int getDiasRenta() {
      return diasRenta;
   }

   @Basic(optional = false)
   @Column(name = "DERE_NUMERO_ASISTEN")
   public int getNumeroAsisten() {
      return numeroAsisten;
   }

   @Size(max = 500)
   @Column(name = "DERE_PEROSONAS_ASISTEN")
   public String getPerosonasAsisten() {
      return perosonasAsisten;
   }

   @Basic(optional = false)
   @Column(name = "DERE_PROV_NUMERO")
   public int getNumeroProveedor() {
      return numeroProveedor;
   }

   @Basic(optional = false)
   @NotNull
   @Column(name = "DERE_MONTO_SIN_IVA")
   public double getMontoSinIva() {
      return montoSinIva;
   }

   @Basic(optional = false)
   @NotNull
   @Column(name = "DERE_MONTO_IVA")
   public double getMontoIva() {
      return montoIva;
   }

   @Basic(optional = false)
   @Column(name = "DERE_MONTO_OTRO_IMP")
   public double getMontoOtroImpuesto() {
      return montoOtroImpuesto;
   }

   @Basic(optional = false)
   @Column(name = "DERE_MONTO_PROPINA")
   public double getMontoPropina() {
      return montoPropina;
   }

   @Basic(optional = false)
   @Column(name = "DERE_SUMA_SIN_IVA")
   public double getSumaSinIva() {
      return sumaSinIva;
   }

   @Size(max = 200)
   @Column(name = "DERE_OBSERVACIONES")
   public String getObservaciones() {
      return observaciones;
   }

   @Basic(optional = false)
   @Column(name = "DERE_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   @Column(name = "DERE_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   @JoinColumn(name = "DERE_REEM_NUMERO", referencedColumnName = "REEM_NUMERO", insertable = false, updatable = false)
   @ManyToOne(optional = false)
   public Reembolso getReembolso() {
      return reembolso;
   }

   @Transient
   public ConceptoGasto getConceptoGasto() {
      return conceptoGasto;
   }

   public void setConceptoGasto(ConceptoGasto conceptoGasto) {
      this.conceptoGasto = conceptoGasto;
   }

   @Transient
   public Moneda getMoneda() {
      return moneda;
   }

   public void setMoneda(Moneda moneda) {
      this.moneda = moneda;
   }

   @Transient
   public Impuesto getImpuesto() {
      return impuesto;
   }

   public void setImpuesto(Impuesto impuesto) {
      this.impuesto = impuesto;
   }

   @Transient
   public Proveedor getProveedor() {
      return proveedor;
   }

   public void setProveedor(Proveedor proveedor) {
      this.proveedor = proveedor;
   }

   @Transient
   public TipoComprobante getTipoComprobante() {
      return tipoComprobante;
   }

   public void setTipoComprobante(TipoComprobante tipoComprobante) {
      this.tipoComprobante = tipoComprobante;
   }

   public void setLlave(DetalleReembolsoPK llave) {
      this.llave = llave;
   }

   public void setClaveTipoComprobante(String claveTipoComprobante) {
      this.claveTipoComprobante = claveTipoComprobante;
   }

   public void setNumeroConceptoGasto(int numeroConceptoGasto) {
      this.numeroConceptoGasto = numeroConceptoGasto;
   }

   public void setDescripcionConcepto(String descripcionConcepto) {
      this.descripcionConcepto = descripcionConcepto;
   }

   public void setNumeroComprobante(String numeroComprobante) {
      this.numeroComprobante = numeroComprobante;
   }

   public void setClaveMoneda(String claveMoneda) {
      this.claveMoneda = claveMoneda;
   }

   public void setTipoCambio(double tipoCambio) {
      this.tipoCambio = tipoCambio;
   }

   public void setFecha(Date fecha) {
      this.fecha = fecha;
   }

   public void setNumeroImpuesto(int numeroImpuesto) {
      this.numeroImpuesto = numeroImpuesto;
   }

   public void setDeducible(String deducible) {
      this.deducible = deducible;
   }

   public void setKilometraje(int kilometraje) {
      this.kilometraje = kilometraje;
   }

   public void setDiasRenta(int diasRenta) {
      this.diasRenta = diasRenta;
   }

   public void setNumeroAsisten(int numeroAsisten) {
      this.numeroAsisten = numeroAsisten;
   }

   public void setPerosonasAsisten(String perosonasAsisten) {
      this.perosonasAsisten = perosonasAsisten;
   }

   public void setNumeroProveedor(int numeroProveedor) {
      this.numeroProveedor = numeroProveedor;
   }

   public void setMontoSinIva(double montoSinIva) {
      this.montoSinIva = montoSinIva;
   }

   public void setMontoIva(double montoIva) {
      this.montoIva = montoIva;
   }

   public void setMontoOtroImpuesto(double montoOtroImpuesto) {
      this.montoOtroImpuesto = montoOtroImpuesto;
   }

   public void setMontoPropina(double montoPropina) {
      this.montoPropina = montoPropina;
   }

   public void setSumaSinIva(double sumaSinIva) {
      this.sumaSinIva = sumaSinIva;
   }

   public void setObservaciones(String observaciones) {
      this.observaciones = observaciones;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   public void setReembolso(Reembolso reembolso) {
      this.reembolso = reembolso;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (llave != null ? llave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof DetalleReembolso)) {
         return false;
      }
      DetalleReembolso other = (DetalleReembolso) object;
      if ((this.llave == null && other.llave != null) || (this.llave != null && !this.llave.equals(other.llave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "DetalleReembolso[ llave=" + llave + " ]";
   }
}
